home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / h_logl10 / h_log.asm next >
Assembly Source File  |  1991-10-18  |  4KB  |  198 lines

  1.  
  2.     ASSUME    CS:CODE,DS:CODE,SS:STACK
  3.  
  4. CODE    SEGMENT    DWORD 'CODE'
  5.  
  6. DOT_Y    EQU    87H
  7. LEN    EQU    130H
  8. PROG    EQU    14000H-LEN
  9.  
  10.     PUBLIC    TBIOS
  11. TBIOS:
  12. ;    PUBLIC    EGB_init
  13. EGB_init:
  14.     PUSH    DWORD PTR 0
  15.     PUSHAD
  16.     CLD
  17.     MOV    AX,2CH
  18.     MOV    DS,AX
  19.     MOV    ES,AX
  20.     MOV    AL,0
  21.     XOR    EDI,EDI
  22.     MOV    ECX,-1
  23. ENV:    REPNZ    SCASB
  24.     CMP    [EDI],AL
  25.     JNZ    SHORT ENV
  26.     ADD    EDI,2
  27. CNVRT:    INC    EDI
  28.     MOV    AL,[EDI]
  29.     CMP    AL,'a'
  30.     JC    SHORT KOMOJI
  31.     CMP    AL,'z'+1
  32.     JNC    SHORT KOMOJI
  33.     SUB    AL,20H
  34.     MOV    [EDI],AL
  35. KOMOJI:    TEST    AL,AL
  36.     JNZ    SHORT CNVRT
  37.     CMP    DWORD PTR [EDI-12],'H'+'_'*100H+'V'*10000H+'2'*1000000H
  38.     JNZ    SHORT EXIT3
  39.     CMP    DWORD PTR [EDI-08],'1'+'L'*100H+'1'*10000H+'0'*1000000H
  40.     JNZ    SHORT EXIT3
  41.     CMP    DWORD PTR [EDI-04],'.'+'E'*100H+'X'*10000H+'P'*1000000H
  42.     JNZ    SHORT EXIT3
  43.     OR    AL,[EDI-13]
  44.     JZ    SHORT FILEOK
  45.     CMP    AL,':'
  46.     JZ    SHORT FILEOK
  47.     CMP    AL,'\'
  48.     JNZ    SHORT EXIT3
  49. FILEOK:    MOV    AL,24H
  50.     MOV    DS,AX
  51.     MOV    ES,AX
  52.     MOV    EDI,81H
  53.     MOVZX    ECX,BYTE PTR [EDI-1]
  54.     MOV    AL,' '
  55.     REPZ    SCASB            ; パラメータ1の前のスペーススキップ
  56.     JZ    SHORT EXIT3
  57.     REPNZ    SCASB            ; パラメータ1スキップ
  58.     JNZ    SHORT EXIT3
  59.     REPZ    SCASB            ; パラメータ2の前のスペーススキップ
  60.     JZ    SHORT EXIT3
  61.     REPNZ    SCASB            ; パラメータ2スキップ
  62.     JNZ    SHORT EXIT3
  63.     REPZ    SCASB            ; パラメータ3の前のスペーススキップ
  64.     JZ    SHORT EXIT3
  65.     LEA    EDX,[EDI-1]
  66.     REPNZ    SCASB            ; パラメータ3スキップ
  67.     XOR    ECX,ECX
  68.     MOV    BYTE PTR [EDI-1],CL    ; パラメータ3の末尾を0にする
  69.     CMP    BYTE PTR [EDX],'+'
  70.     JNZ    SHORT OVRWRT
  71.     INC    EDX
  72.     MOV    AX,3D02H        ; ファイルのオープン
  73.     INT    21H
  74.     JC    SHORT OVRWRT
  75.     MOV    EBX,EAX
  76.     XOR    EDX,EDX
  77.     MOV    AX,4202H        ; ファイルのシーク
  78.     INT    21H
  79.     MOV    EAX,EBX
  80.     JMP    SHORT EXIT4
  81. OVRWRT:    MOV    AH,3CH            ; オーバーライトモード
  82.     INT    21H
  83.     JNC    SHORT EXIT4
  84. EXIT3:    XOR    EAX,EAX
  85. EXIT4:    MOV    CX,118H
  86.     MOV    DS,CX
  87.     MOV    [HANDLE+PROG],AX
  88.     POPAD
  89.     RET
  90.  
  91.     ALIGN    4
  92. ;    PUBLIC    EGB_sjisString
  93. EGB_sjisString:    
  94.     PUSH    DWORD PTR 0
  95.     CMP    WORD PTR [ESI+2],DOT_Y
  96.     JNZ    SHORT EXIT2
  97.     PUSH    ESI
  98.     ADD    ESI,4
  99. COMMON:    MOV    BX,FS:[HANDLE+PROG]
  100.     TEST    BX,BX
  101.     JZ    SHORT EXIT1
  102.     LODSW
  103.     MOVZX    ECX,AX
  104.     TEST    ECX,ECX
  105.     JZ    SHORT EXIT1
  106.     PUSH    DS
  107.     MOV    EDX,ESI
  108.     MOV    AH,40H
  109.     INT    21H
  110.     JC    SHORT EXIT5
  111.     CMP    EAX,ECX
  112.     JNZ    SHORT EXIT5
  113.     MOV    AX,118H
  114.     MOV    DS,AX
  115.     MOV    CL,2
  116.     MOV    EDX,OFFSET CRLF+PROG
  117.     MOV    AH,40H
  118.     INT    21H
  119.     JC    SHORT EXIT5
  120.     CMP    EAX,ECX
  121.     JZ    SHORT EXIT6
  122. EXIT5:    MOV    [HANDLE+PROG],0
  123. EXIT6:    POP    DS
  124. EXIT1:    POP    ESI
  125. EXIT2:    RET
  126.  
  127.     ALIGN    4
  128. ;    PUBLIC    EGB_connectSjisString
  129. EGB_connectSjisString:
  130.     PUSH    DWORD PTR 0
  131.     CMP    WORD PTR GS:[EBP+344H+2],DOT_Y
  132.     JNZ    SHORT EXIT2
  133.     PUSH    ESI
  134.     JMP    SHORT COMMON
  135.  
  136. CRLF    DB    13,10
  137. HANDLE    DW    ?
  138.  
  139.     ALIGN    4
  140.     PUBLIC    START
  141. START:
  142.     ; TBIOS書き込みセグメント
  143.     MOV    AX,118H
  144.     MOV    ES,AX
  145.     CLD
  146.     ; TBIOS最後の必要エリアが0か調べる
  147.     MOV    EDI,PROG
  148.     XOR    EAX,EAX
  149.     MOV    ECX,LEN/4
  150.     REPZ    SCASD
  151.     JNZ    SHORT ERROR
  152.     ; コール先を探す
  153.     MOV    EBX,ES:[20H]
  154.     MOV    EAX,0BD14FF2EH    ; CALL CS:[EDI*4+????????]
  155.     MOV    ECX,100H
  156.     DEC    EBX
  157. SEARCH:    INC    EBX
  158.     CMP    ES:[EBX],EAX
  159.     LOOPNZ    SEARCH
  160.     JNZ    SHORT ERROR
  161.     MOV    EBX,ES:[EBX+4]
  162.     ; データの書換え EGB_init
  163.     MOV    EAX,OFFSET EGB_init+PROG
  164.     XCHG    EAX,ES:[EBX]
  165.     MOV    DWORD PTR [EGB_init+1],EAX
  166.     ; データの書換え EGB_sjisString
  167.     MOV    EAX,OFFSET EGB_sjisString+PROG
  168.     XCHG    EAX,ES:[EBX+60H*4]
  169.     MOV    DWORD PTR [EGB_sjisString+1],EAX
  170.     ; データの書換え EGB_connectSjisString
  171.     MOV    EAX,OFFSET EGB_connectSjisString+PROG
  172.     XCHG    EAX,ES:[EBX+61H*4]
  173.     MOV    DWORD PTR [EGB_connectSjisString+1],EAX
  174.     ; TBIOSへの転送
  175.     XOR    ESI,ESI
  176.     MOV    EDI,PROG
  177.     MOV    ECX,LEN/4
  178.     REP    MOVSD
  179.     ; 正常終了
  180.     MOV    AL,0
  181.     JMP    SHORT EXIT
  182.     ; 異常終了
  183. ERROR:    MOV    AL,1
  184. EXIT:    MOV    AH,4CH
  185.     INT    21H
  186.  
  187.     DB    'H_LOG V1.1 by Yasu.Hara.'
  188.  
  189. CODE    ENDS
  190.  
  191. STACK    SEGMENT DWORD STACK 'STACK'
  192.  
  193.     DB    1024 DUP(?)
  194.  
  195. STACK    ENDS
  196.  
  197.     END    START
  198.